package com.edu.exam.enums.examination.security;

/**
 * 会话安全级别枚举
 *
 * 从SessionSecurity.SecurityLevel迁移而来
 * 定义考试会话的安全级别，用于控制不同安全级别的访问权限和验证要求
 *
 * @author System
 * @version 1.0.0
 */
public enum SessionSecurityLevel {

    /**
     * 公开级别 - 最低安全级别，基本验证
     */
    PUBLIC("PUBLIC", "公开级别"),

    /**
     * 基础级别 - 标准安全验证
     */
    BASIC("BASIC", "基础级别"),

    /**
     * 中等级别 - 中等安全验证
     */
    MEDIUM("MEDIUM", "中等级别"),

    /**
     * 标准级别 - 增强安全验证
     */
    STANDARD("STANDARD", "标准级别"),

    /**
     * 高级级别 - 严格安全验证
     */
    HIGH("HIGH", "高级级别"),

    /**
     * 严格级别 - 最严格安全验证
     */
    STRICT("STRICT", "严格级别"),

    /**
     * 最高级别 - 最高安全验证，用于重要考试
     */
    MAXIMUM("MAXIMUM", "最高级别");

    private final String code;
    private final String description;

    SessionSecurityLevel(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取对应的枚举
     *
     * @param code 编码
     * @return 对应的枚举
     */
    public static SessionSecurityLevel fromCode(String code) {
        for (SessionSecurityLevel level : values()) {
            if (level.getCode().equals(code)) {
                return level;
            }
        }
        throw new IllegalArgumentException("Unknown session security level code: " + code);
    }

    /**
     * 根据描述获取对应的枚举
     *
     * @param description 描述
     * @return 对应的枚举
     */
    @Override
    public String toString() {
        return description;
    }
}
